//! Header for the Song class
#ifndef SONG_H
#define SONG_H

//! Represents a song
/*!
	The class song represents a song with all its 
	neccessary information.
	\class Song
	\author Thomas Pfeiffer
	\date 06.12.2012
*/
#include "MusicMedia.h"

class Album;

class Song : public MusicMedia {
public:

	//! The CTor of a Song
	/*!
		Calls its parent CTor to correctly set the Kind and
		initializes the songinfo.
		\param name The name of the song
		\param interpret The Interpret of the song
		\param album The Album the song belongs to
		\param duration The duration of the song
	*/
	Song (std::string name, std::string interpret, Album * album, TDuration duration) : 
		MusicMedia(eSong, name), mInterpret(interpret), mAlbum(album), mDuration(duration) {} 
	
	void Accept (IVisitor * visitor);
	
	//! Returns the Album of the Song
	/*!
		Returns the Album of the Song
		\returns The Album of the song.
	*/
	std::string const* getInterpret() const;
	
	//! Returns the Album of the Song
	/*!
		Returns the Album of the Song
		\returns The Album of the song.
	*/
	Album const * getAlbum() const;

	//! Returns the Album of the Song
	/*!
		Returns the Album of the Song
		\returns The Album of the song.
	*/
	TDuration const * getDuration() const;
private:
	std::string mInterpret;
	Album * mAlbum;
	TDuration mDuration;
};

#endif